<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // Set集合的实践： 去重、求交集、并集、以及 差集

        // 1. 去重：
        const a1 = [4,5,6,4];
        const a2 = [...new Set(a1)];
        // 将上面代码可拆成如下两步
        // const s = new Set(a1);
        // const a2 = [...s];
        console.log(a2);

        // 2. 集合的操作
        const aFriends = ["胡歌", "彭于晏", "王嘉尔", "张杰", "胡歌"];
        const bFriends = ["张奕迅", "彭于晏", "李晶", "张杰", "张博洋"];

        // 如何计算上面两个数组a 和 b的朋友交集
        // 将a的朋友去重，使用filter过滤，判断每个是否在b的朋友里。
        const innerFriends = [...new Set(aFriends)].filter(item => {
            // 使用b的所有朋友信息创建一个set集合（去重）
            const b = new Set(bFriends);
            // 判断b的朋友中是否存在item（a的朋友）
            return  b.has(item);
        });
        console.log(innerFriends);


        // 3. 计算并集：
        // 将两者的所有朋友都放到一下，使用Set去重后再转成数组
        const allFriends = [...new Set([...aFriends, ...bFriends])];
        console.log(allFriends);

        // 4. 差集：（就是你有，我没有的， 或我有的你没有的）
        // 例如： 是b的朋友，但不是a的朋友，
        const myf = [...new Set(bFriends)].filter(item =>{
            // 创建a的朋友集合
            const a = new Set(aFriends);
            return  !a.has(item);
        });
        console.log(myf);

    </script>
</body>
</html>